home *** CD-ROM | disk | FTP | other *** search
/ United Public Domain Gold 2 / United Public Domain Gold 2.iso / utilities / pu652.dms / pu652.adf / AIBB3.docs < prev    next >
Text File  |  1994-11-20  |  59KB  |  952 lines

  1.                    Amiga Intuition Based Benchmarks (AIBB)
  2.         A System Performance Evaluation Utility for the Commodore Amiga
  3.                           Release Version 3.0
  4.  
  5.  
  6.    This program's primary purpose is to time-test low-level performance
  7. of an Amiga system, and compare the results with known figures for 3 other 
  8. machines, namely the Amiga 2000 (or 500), the Amiga 2500/20 (68020 based
  9. version), and the Amiga 3000/25 (25Mhz model). The comparisons made within 
  10. the program are designed to be a 'General' type of comparison. They are far 
  11. from 'exact to 0.000000000xx percentage, and do not always reflect 
  12. real-world applications performance.  They can give an idea of the low-level
  13. performance marks of a particular system, however.  Because of the nature of 
  14. computer systems, and the fact that differences can occur between two machines 
  15. of the same type, the comparisons made should be used as an average view of 
  16. system performance.  Many comparison samples were used to gather these figures, 
  17. and most should come within a good proximity of the values.  The conditions 
  18. under which these values were  obtained is explained in the documentation 
  19. below.  If you want to REALLY be sure of the comparisons, ideally you should 
  20. run the tests on your machine, record the time value each test displays 
  21. (the run-time for each test), and do the same thing to the machine you wish 
  22. to compare against, and evaluate the differences.  This program will give 
  23. you an average result answer however, allowing you to make general comparisons 
  24. with other types of machines and configurations  Please do read the 
  25. subsection under menus describing the 'Be Selfish' option...there are some 
  26. warnings you MUST read there, and important information pertaining to the
  27. comparision evaluations with this option.
  28.  
  29. -------------------------------------------------------------------------------
  30. -------------------------------------------------------------------------------
  31. -------------------------------------------------------------------------------
  32.  
  33.  Amiga, all Amiga models, and Intuition are trademarks of Commodore-Amiga Inc.  
  34.  MC68000, MC68010, MC68020, MC68030, and MC68040 microprocessor designations,
  35.  M68851 Memory Management Unit, and M68881, M68882 Floating Point coprocessor 
  36.  designations are trademarks of Motorola Inc.
  37.  
  38. Disclaimer:  I make no guarantees that this program will be accurate.  I
  39.              have made every attempt to make it so, but I cannot be held
  40.              responsible for its accuracy, and/or consequences of such.
  41.              (In other words, include standard disclaimer here :-) )
  42.              Also, should this program maim and/or destroy various aspects
  43.              of your Amiga, I am also not responsible.  (Well...it hasn't
  44.              killed yet...): Another meaning; if you run this program, and 
  45.              something about it surprises you, causing you to
  46.              spill coffee into your machine, which sends a power spike
  47.              feedback through the power lines, down to your local power
  48.              station, which subsequently explodes in flames...,
  49.              I don't, and never did exist.  ;^)
  50.  
  51. -----------------------------------------------------------------------------
  52. -----------------------------------------------------------------------------
  53. -----------------------------------------------------------------------------
  54.  
  55. PROGRAM REQUIREMENTS:
  56.  
  57.    This program can be used on any Amiga...but there are a few requirements
  58. to use all of it's features. In order to use the Log File saving utility, 
  59. you must have the req.library in you libs: directory (v2.5 or higher). Please 
  60. read the appropriate sections below for more information on this topic.  
  61. Note that this requirement is not in actuality a "requirement", but rather 
  62. simply necessary to use a certain feature.  Special Note:  Under the CLI AIBB
  63. will create it's own stack, when running AIBB from the workbench, however,
  64. you must be sure the STACK field of the icon used is set to the value
  65. of 18500.  The supplied icon is already pre-set with this value.  The only
  66. errors AIBB may encounter which will result in the program aborting before
  67. starting are that: 1.)If you started from the WorkBench, and the stack
  68. field in the icon was less than 18500 (CLI users need not worry about any
  69. settings), or 2.)AIBB was unable to open either the intuition.library,
  70. graphics.library, or dos.library (all of which are KickStart libraries, 
  71. which is in ROM on most machines).  If AIBB encounters any of these problems,
  72. it will simply abort gracefully, perhaps flashing the screen.
  73.  
  74. ******************************************************************************
  75. ******************************************************************************
  76. ******************************************************************************
  77.  
  78. USING THE PROGRAM:
  79.  
  80.      This program was designed to be fairly easy to use...which is the 
  81. reason I utilized an Intuition interface.  Basically, test options and
  82. such are selected from menu items, and a test is intiated by selecting
  83. it's gadget on the screen.  Again, note that the comparisons made in this
  84. program are meant to be general.  Here's an overview:
  85.  
  86.  
  87. *****************************************************************************
  88. ************************* The Main Screen ***********************************
  89. *****************************************************************************
  90.  
  91.      The screen is divided into two areas.  On the left side, you will find
  92. the performance graph, and CPU status indications.  The performance graph is
  93. basically just a graphical display of the percentage performance of the 
  94. various machines, including your own. The scale represents percentages in 
  95. hundreds, i.e. a factor of 6 would be 600%, etc... If for some reason your 
  96. machine measures off the scale which is currently displayed, AIBB will 
  97. auto-scale the graph to a suitable factor of the base scale (0-14) to fit
  98. the data on the screen.  When a test is performed which is much less than
  99. a currently displayed scale, then AIBB will auto-scale downward (the limit
  100. being the base of 0-14) The CPU status area is directly below the graph, 
  101. and shows the CPU type in your system, and the status of the various caches, 
  102. if applicable, as well as if burst mode on the caches has been enabled.  If 
  103. your CPU does not have a particular cache feature, the display will show 
  104. N/A (Not Applicable). The approximate clockspeed of your CPU is also 
  105. displayed in this area (evaluated when AIBB is invoked), as well as the FPU 
  106. type on the system, should one exist.  [NOTE: These are APPROXIMATE 
  107. clockspeed indications...+ or - 5-10%]
  108.  
  109.      The right side of the display contains the numerical analysis display
  110. boxes and the test selection gadgets.  From top to bottom, the features are:
  111.      
  112.      Benchmark Result:  This box shows the running time in seconds for the
  113.                         benchmark performed.  It is not a comparison, but
  114.                         simply a display of the time used in performing the
  115.                         benchmark.
  116.  
  117.      Base Machine = :   This area will show what machine is currently being
  118.                         used as the base machine for percentage calculations.
  119.                 
  120.      The next 4 boxes in decending order are the numerical representations of
  121.      the percentage performance of each machine for a particular benchmark.
  122.      All percentage calculations are percentages relative to the base 
  123.      machine, where the base machine will always show 100% performance 
  124.      (naturally, as it is relative to itself). In addition to the
  125.      "Base Machine = " indicator noted above, the Base Machine will have
  126.      the marking for it's percentage box highlighted.  Also displayed with
  127.      the performance percentages in the boxes is an abbreviation for the
  128.      type of test code being used for the comparison...this is explained
  129.      further under the Menus section (Test Option and Comparison Options).
  130.  
  131. ------------------------------------------------------------------------------
  132.  
  133.      The lower right hand side of the screen contains the test gadgets.
  134. selecting a given gadget invokes the test it represents.  AIBB currently
  135. implements 12 tests.  These tests are divided into two types: "Normal"
  136. tests, and Floating Point tests.  "Normal" tests are ones which do not
  137. utilize any floating-point operations, utilizing integer math only, or
  138. no math at all.  "Normal" Tests are indicated by dark blue labels upon
  139. their gadgets, whilst Floating Point tests are indicated by bright blue
  140. lables.  A description of the tests follows, along with the test's memory
  141. usage.  This may be important in determining where the test will end up
  142. Allocating it's memory.  Note that tests which do not allocate external
  143. memory are using the program's stack to store variables, and miscellaneous
  144. items.  A program's stack is an area of memory created upon the task's 
  145. invocation.  Under many circumstances, you may have control of this 
  146. stack size...for example, program's invoked under the CLI or Shell will
  147. often inherit the default stack set for that CLI/Shell window...which
  148. can be set/changed with the c: "Stack" command.  However, AIBB does not
  149. inherit this value, instead allocating it's own stack area (approximately
  150. 18K) in the case of the CLI... or having it set higher in the case of
  151. WorkBench invocation. The tests:
  152.  
  153.      WritePixel: (NORMAL test)
  154.           The WritePixel Benchmark will open a small window on the screen
  155.      and fill it with a box of a given color.  The filling is done one
  156.      pixel at a time, utilizing the graphics.library (OS) routines
  157.      SetAPen() [set the current RastPort primary pen color] and WritePixel()
  158.      [which sets a pixel to the given primary pen color].  The test is
  159.      basically a benchmark of the time needed to call these routines, and
  160.      for them to execute.  The loop time is factored out of the test
  161.      result.  For the most part, this test will be useful for evaluating
  162.      the effective ROM image access time for systems which differ from
  163.      the conventional ROM access method found on the Amiga 2000, namely
  164.      accessing the ROM over a 16 bit bus.  Many accelerators are able
  165.      to utilize various methods (most commonly through Dave Haynie's 
  166.      SetCPU utility) to move the image of the ROM code into a faster 
  167.      memory environment to take advantage of the additional speed and
  168.      wider bus bandwidth of higher 680x0 processors (68020, 68030, etc).
  169.      This commonly involves utilizing a Memory Management Unit (MMU)
  170.      [68551, external device anchored to the 68020, or internally implemented
  171.      on the 68030] to divert ROM routine calls to a copy of the ROM
  172.      image made in the faster (32-bit) memory.  The time needed to
  173.      access and execute this image is dependent upon the speed of the
  174.      processor/memory setup. [Of course, on the Amiga 3000, the bus is
  175.      nominally 32-bits wide, therefore no movement of the ROM image is
  176.      required].  Now, there's more to this...accelerated Amigas still
  177.      have to access CHIP RAM for this test, as graphics functions are
  178.      performed.  Therefore, this test will also show (somewhat) the
  179.      efficiency of the accelerator (if present) when synchronizing to
  180.      and accessing the CHIP RAM bus.  [Again, for the Amiga 3000, this
  181.      is not entirely applicable, as the design is integrated].  
  182.      Now, this CHIP RAM bus->accelerator/processor interface efficiency 
  183.      can cause differences in systems which are based upon similar
  184.      accelerated processors, (and at the same processor clockspeed).
  185.      Usually the difference is not too great, but it can occasionally
  186.      show.  Now, for accelerators which do not do ROM image translations,
  187.      (usually for ones incapable of them), this test will mostly just
  188.      reflect the faster call/return to the benchmark code.  However,
  189.      if an accelerator includes a cache of any sort, then the cache will
  190.      speed the routines themselves up somewhat, as the code for them
  191.      may be partially, or even fully cached by the accelerator, negating
  192.      the need for the bus access to utilize the OS routine. 
  193.      Memory Usage: No memory external to AIBB is allocated.
  194.  
  195.      Dhrystone: (NORMAL Test)
  196.          This test should be fairly familiar to most people, as it has
  197.      been utilized on many different system for benchmarking purposes.
  198.      It's a test which attempts to achieve a close-to-real-world-performance
  199.      evaluation of the system in question.  It returns, not run-time in
  200.      seconds, but rather a rating of Dhrystones per second, where in this
  201.      case, the larger number indicates better performance.
  202.      Memory Usage: Minimal. 44 bytes external to AIBB are allocated.
  203.  
  204.      Matrix: (NORMAL Test)
  205.          A matrix manipulation benchmark utilizing 3 50x50 integer matrices.
  206.      The test simply performs a series of operations (addition/subtraction,
  207.      multiplication, transposition, etc) upon these matrices.  Now, the
  208.      test is set up in such a way that a great amount of time is spent
  209.      moving data, as well as performing arithmetic operations upon it.
  210.      Therefore, this could be thought of as also testing memory manipulation
  211.      efficiency.  Also, the test is an indicator of how well a processor/
  212.      memory combination handles memory accesses to data, and operations on
  213.      such, as the test does not allow the processor to simply perform the 
  214.      data operation within it's registers.
  215.      Memory Usage: 30000 bytes external to AIBB are allocated. 
  216.  
  217.      Fibonacci: (NORMAL Test)
  218.          The Fibonacci sequence is a mathematical sequence which has found
  219.      some application in the natural sciences, notably in the study of
  220.      the constructs of nature.  The sequence is set up as follows:
  221.                                   x(0) = 0
  222.                                   x(1) = 1
  223.                                     ...
  224.                              x(j) = x(j) + x(j-1)
  225.      where x(j) is simply the next number in the sequence, read "x sub j".
  226.      Because of the relative simplicity of the sequence, it lends itself 
  227.      easily to the creation of a recursive program algorithm to compute
  228.      the value.  For those unfamiliar with programming in general, a 
  229.      recursive function is one which calls itself from within itself.
  230.      Recursive algorithms in themselves are very inefficient, due to their
  231.      nature of repeatedly making a function call to themselves, which 
  232.      involves repeated address offset calculations, stack value pushing,
  233.      etc... by the processor.  However, it is sometimes interesting to use 
  234.      such a function to test the efficiency of a system in it's handling of 
  235.      multiple function calls.  For this reason, I implemented the a 
  236.      recursive Fibonacci calculation algorithm here, and the benchmark 
  237.      consists of timing it when calculating the value of Fibonacci(24) 50 
  238.      times.  Each call to the recursive routine to perform the calculation 
  239.      will result in 150,049 recursive function calls which the Fibonacci 
  240.      routine will make to itself.  For those curious, the value of 
  241.      Fibonacci(24) is 46,368.
  242.      Memory Usage: No memory external to AIBB is allocated.
  243.   
  244.      Sieve: (NORMAL Test)
  245.          Another test which should be familiar to most, the Sieve of
  246.      Erathosthenes.  Its a fairly simple test for determining prime
  247.      numbers within a range of numbers.  This test simply times your
  248.      system when implementing this algorithm, which is decribed fully
  249.      in many textbooks, or one can simply look at BYTE Magazine's
  250.      benchmarks, which use a similar Sieve test.
  251.      Memory Usage: No memory external to AIBB is allocated.
  252.  
  253.      Sort: (NORMAL Test)
  254.          A series of 20,000 16-bit integers is sorted from a pseudo-random
  255.      setup, and the action is timed.  "Pseudo-random" meaning that I did
  256.      not create the numbers in a random fashion, but rather in a mixed fashion
  257.      so that on each invocation of the test the numbers will be created in 
  258.      the SAME mixed fashion.  This is because the sorting algorithm is 
  259.      sensitive to the mixing, and if each time the test was run a different
  260.      group of values was used, no two tests could be compared well.  The 
  261.      mixing method I used was to insure that the algorithm would be forced
  262.      to do the most work for each test.
  263.      Memory Usage: 40000 bytes are allocated external to AIBB.
  264.  
  265.      LLines: (NORMAL Test)
  266.          This is a low-level test of the Amiga's hardware.  It uses the
  267.      Blitter to draw lines (left to right, creating a box) across the
  268.      screen, in each of 16 colors...ending with black.  This test
  269.      is similar to the WritePixel test in that it will hit the CHIP RAM
  270.      bus a great deal (more so in this case), but it makes no calls to
  271.      operating system routines, but rather the system's hardware.  
  272.      [This is done in a "friendly, legal" fashion, so fear not].  Now, as
  273.      all Amiga's have the same basic hardware setup at this level, there
  274.      won't be many differences in benchmark time caused by this.  At
  275.      the time of this writing, therefore, there is not a great deal of 
  276.      use to this test.  However, in the future, there may be other Amiga
  277.      systems which utilize a different bus or chip set for the display
  278.      hardware, so this test may become useful at that time.  Small 
  279.      differences noted for this test between the comparision machines
  280.      are primarily due to loop time differences between the machines
  281.      which could not be completely factored out.
  282.      Memory Usage: No memory external to AIBB is allocated.
  283.      
  284.      IMath: (NORMAL Test)
  285.          Integer Math.  This test performs a wide variety of integer math
  286.      functions.  Included in these functions are the "normal" functions, 
  287.      such as addition, subtraction, multiplication, division, and a 
  288.      few additional bitwise functions, such as ANDing, ORing, and XORing.
  289.      Memory Usage: No memory external to AIBB is allocated.
  290.  
  291.      FMath: (FLOATING POINT Test)
  292.          Floating Point Math.  Similar to the IMath test, with the exeception
  293.      that Floating Point values and operations are utilized.  With this test,
  294.      no bitwise operations are performed.  Single precision floating point
  295.      operations/values are used here.
  296.      Memory Usage: No memory external to AIBB is allocated.
  297.  
  298.      Savage: (FLOATING POINT Test)
  299.          This is another of the "probably familiar" tests.  It is a standard
  300.      implementation of the Savage test, which makes nested calls to 
  301.      trigonometric and other more complex functions to create a single
  302.      value.  Double precision floating point operations/values are used.
  303.      Memory Usage: No memory external to AIBB is allocated.
  304.  
  305.      FMatrix: (FLOATING POINT Test)
  306.          The FMatrix test is similar in concept to the Integer Matrix test
  307.      outlined above.  Again, a great deal of data movement is performed,
  308.      in addition to the operations involved, which are floating point
  309.      operations in this case.  With the matrix operations, the results
  310.      under Floating Point coprocessor equipped systems can be interesting
  311.      to note, as the system is not able to keep the data within speed-ready
  312.      registers, and thus must make many bus accesses for the data it needs.
  313.      Double-precision floating point math is used for this test.
  314.      Memory Usage: 37,500 bytes externally allocated.
  315.  
  316.      BeachBall: (FLOATING POINT Test)
  317.          The longest test of the group.  The BeachBall test was originally
  318.      written by Bruce Holloway of Weitek, and published in the March 1988
  319.      issue of Byte Magazine.  It is essentially a very math-intensive
  320.      operation which basically draws a beachball on the screen, complete
  321.      with shading.  The test opens a 640x400 interlaced 16-color screen,
  322.      and proceeds to render the picture.  This test is closer to a true
  323.      "application" test, in that it actually does something visible, and
  324.      produces an output.  The system will end up being tested in both the
  325.      floating point arena, AND in screen output performance, which is 
  326.      done through traditional OS graphics handling calls [thus will be
  327.      affected by the speed of which, which in turn can be affected by
  328.      ROM re-mapping, etc].  The picture will remain on-screen for 5 seconds
  329.      after the rendering is complete to allow you to view the full creation.
  330.      Memory Usage: No memory external to AIBB is allocated.
  331.  
  332. TEST AND COMPARISON NOTES:
  333.      These tests are far from ideal.  They suffer from traditional problems
  334. related to benchmarks, in that they do not in and of themselves provide
  335. a total picture of system throughput.  Many factors must be taken into 
  336. account when evaluating system throughput, including the architecture in
  337. question, it's characteristics, and it's slowest and fastest attributes.
  338. The tests CAN provide a starting point for evaluating a system, however.
  339. I urge you to look at them as such, rather than the complete answer as to
  340. which system is fastest...that decision is more based on what a particular
  341. individual's NEEDs are. [eg, if a person needs to do data transfer as a 
  342. major portion of their work, then perhaps a fast disk subsystem and 
  343. communications setup would be more appropriate to test than low-level
  344. system performance.  If applications are to be run which are very disk
  345. intensive, then a faster disk subsystem will probably make more of a 
  346. difference towards system througput then a faster CPU/FPU combination...
  347. all of these things must be taken into account]
  348.  
  349. Note that the tests CANNOT be aborted once begun (short of re-setting the
  350. system).  This is necessary as to provide such an abort mechanism would 
  351. require that I add code to poll the message ports to AIBB's interface...
  352. this in itself would affect the benchmark as the time necessary to poll
  353. those ports would show up within the benchmark time, and thus a true 
  354. benchmark result would not be possible.  I warn you of this for a very
  355. important reason:  Some of AIBB's tests are _LONG_...especially on more
  356. or less stock systems.  In fact, if you are running a stock 68000-based
  357. system, then most of the floating point tests will be excruciatingly slow.
  358. [The Savage and BeachBall tests are the type where you go out for a while
  359. when running them].  On faster systems this is not such a problem, but 
  360. (for example), on a 25MHz 68030 system in 32-bit SRAM (1 wait state), the
  361. Savage will still take 80 or so seconds when NOT using a math coprocessor.
  362. [Don't ASK where this came from... :^) ...Using the Coprocessor version of 
  363. this test, with a 25MHz 68882, the test will run in under 3 seconds].  
  364. Please do keep these things in mind if you run these tests...especially under 
  365. the "Be Selfish" option (explained further below)...the system has not 
  366. crashed, or hung on you....the test you selected may simply be VERY LONG, 
  367. depending on your system configuration and the type of test parameters you 
  368. selected...I have thoroughly tested AIBB...even under low memory situations,
  369. and in the final incarnation of this version I have not been able to crash
  370. it yet.  If it should do so, however, I would appreciate being told about
  371. it.]
  372.  
  373. ******************************************************************************
  374. ****************************** Menu Items ************************************
  375. ******************************************************************************
  376.  
  377.        The menu fields in the menu bar for AIBB are as explained below
  378.  
  379. ==============================================================================
  380. The GENERAL menu:
  381.  
  382.      About:   
  383.             This simply shows my neato little 'about the program and
  384.             life in general' requester.  Fairly standard stuff.
  385.      -------------------------------------------------------------------------
  386.      System Status:
  387.             The screen will fade out and back in with a display of some key
  388.             notes of interest about your current system status.  Various
  389.             elements of you system's current state and parameters will
  390.             be shown in the upper portion of the screen, including  the 
  391.             location of your system stack (this may be of importance, as is 
  392.             explained later), Vector Base Register address (if present) and 
  393.             the number of currently waiting and ready tasks are among the 
  394.             items of interest.  The lower portion of the display holds the 
  395.             system's memory information.  Each entry corresponds to a given 
  396.             memory node in the system, such as your CHIP RAM area, a FAST RAM 
  397.             board, etc.  The current priority of each area's memory, it's 
  398.             address, and number of free bytes are displayed, as well as 
  399.             total memory figures current for the system.  This information 
  400.             may be useful for determining the exact conditions a test is 
  401.             being run under.
  402.      -------------------------------------------------------------------------
  403.      Start/Stop Log File:
  404.             This will allow you to activate/deactivate AIBB's saving of
  405.             test results. [The menu will show 'Start' when you are 
  406.             currently NOT saving results, and 'Stop' when you are]. When
  407.             first selected, AIBB will call up a file requester asking you
  408.             for the name of the Log file to use.  Currently, the file 
  409.             requester implemented is the one found in Colin Fox and Bruce
  410.             Dawson's req.library, which must be in your LIBS: directory in
  411.             order to access this feature.  If AIBB cannot find this
  412.             shared library, the Log File menu option will be disabled
  413.             (ghosted), and you will not be able to save your results in
  414.             this manner....however the program will still function otherwise.
  415.  
  416.             When a file is selected, AIBB first checks to see if it exists.
  417.             If not, it will create it, writing the identifier 'AIBBLogFile'
  418.             at the head of the file (standard text file).  All future test
  419.             results will be appended to this file, until 'Stop Log File'
  420.             is selected, or the program exits. [Note: it is NOT necessary to
  421.             stop file logging before exiting...it is mainly there if you 
  422.             wish to make another file].  If the file you select DOES exist,
  423.             AIBB will check the beginning of the file for the 'AIBBLogFile'
  424.             identifier...if it finds this, it will again append all results
  425.             to the end of this file (nothing will be overwritten)...if AIBB
  426.             does not find the identifier at the start of the file, a 
  427.             requester will pop up warning that the file is NOT a standard
  428.             AIBB log file, and will ask you if you wish to cancel the
  429.             operation, OR use the file anyway.  Be careful..this warning is
  430.             designed to keep you from writing over important files...or 
  431.             programs. [NOTE:  AIBB WILL happily write into a binary file if 
  432.             told to continue...I will add some better checking in the future, 
  433.             but for now, WATCH the warning!].  Note that AIBB does not buffer 
  434.             results...it writes to the file as soon as a test is completed.  
  435.             This shouldn't be too much of a problem, but if people find it 
  436.             irritating, I will of course add in some buffering.  If desired, 
  437.             RAM: or a recoverable RAMdisk can be used to save results, but 
  438.             care should be taken that the space the file takes will not use 
  439.             up your system memory to an extent that the test results will be 
  440.             affected. (eg, using up your FAST RAM or enough of it that the
  441.             memory for a test ends up being allocated in CHIP or SLOW-FAST
  442.             RAM, or another slower medium than the ideal you wished to 
  443.             examine.
  444.      -------------------------------------------------------------------------
  445.      Quit:
  446.             Self explanatory.
  447.             The machine will be placed back into the state it was in when
  448.             the program was first invoked...regardless of the manipulations
  449.             which may have been done during the tests (See the section
  450.             on 680x0 cache manipulation).  
  451.  
  452. ==============================================================================
  453.  
  454. The TEST OPTIONS (second) Menu:  This menu contains items relevant to the
  455. tests being performed, and the way the results are displayed:
  456.  
  457.     Be Selfish:  
  458.             This is an important item.  Basically, when this is
  459.             selected, the program will make sure no other tasks 
  460.             are given CPU time while one of the tests is running.
  461.             In this way, you are assured that the test results will
  462.             reflect true CPU performance, and not lag due to other
  463.             tasks taking up some of the CPU's time.  All of the 
  464.             comparison figures for the other machines were obtained
  465.             with this option ON (A check will be placed by the
  466.             option when it is active), *******IF YOU WISH TO COMPARE
  467.             TO THE OTHER MACHINES IN THE PROGRAM MOST ACCURATELY,
  468.             HAVE 'Be Selfish' SELECTED******  Read on...When 'Be
  469.             Selfish' is active, the system will not respond to you
  470.             while a test is running.  Meaning, you will not be able
  471.             to move your mouse pointer, and that most enjoyable 
  472.             floppy drive 'clicking' will even stop.  THIS IS NORMAL!
  473.             You will regain control when the test completes...the
  474.             system did not hang.  Some tests do take a little time,
  475.             so hang in there.  The only time you will really not
  476.             want to have 'Be Selfish' active is if you wish to 
  477.             test the performance drain on your system from having
  478.             multiple tasks running. (or just to see what the normal
  479.             load of tasks does to your CPU performance). Now...you must
  480.             know something about this option.  What AIBB is doing when
  481.             this option is active is invoking a Disable() call a bit before 
  482.             each test, and then an Enable() afterwards.  Disable() 
  483.             is an operating system function which stops all interrupts
  484.             within the system.  Since the Amiga's multitasking depends upon
  485.             interrupts for task switching operatons, this is also stopped, 
  486.             and AIBB becomes the only task doing anything (there are  
  487.             exceptions...that is explained later).  ALL this aside, I MUST 
  488.             give you a warning. I designed this program to test CPU/FPU 
  489.             performance, and as such it is a good idea to have as little 
  490.             running in the background as possible...aside from performance 
  491.             issues though, there are some programs/operations which are very 
  492.             timing sensitive.  The Amiga's Multitasking Executive was 
  493.             designed to be as close to real-time responsive as possible.  As
  494.             such, programs and tasks under it may be sensitive to system
  495.             timing.  Such programs may become erratic, or even crash if
  496.             a function such as Disable() is invoked for any length of time.
  497.             [Disable() should normally only be for a _brief_ time...this
  498.              program makes an exception of that in order to get more accurate
  499.              timing results].  Now, most programs I have encountered do not
  500.             have a problem with AIBB, but things to watch out for are 
  501.             programs making heavy use of communications ports (serial, 
  502.             parallel, etc, and disk-intensive programs.  Now, this is not
  503.             to say AIBB is just waiting to crash your system...I've not had
  504.             a crash related to this yet.  However, AIBB was designed basically
  505.             to be run ALONE, at least while in "Be Selfish" mode, and there
  506.             is basically little reason to run it otherwise while using this
  507.             mode.  But do consider disk operations while in Be-Selfish mode,
  508.             and running a test to be a no-no.  NOTE: AIBB's own file saving 
  509.             is done in a safe way, and CAN be used with 'Be Selfish', as the 
  510.             program only accesses the disk when not performing a test.  If
  511.             you have AIBB just sitting there not doing anything, then you 
  512.             do not have to worry, even with "Be Selfish" selected, as this
  513.             option is only effective while a test is in progress. 
  514.  
  515.             AIBB defaults to NOT using Be Selfish so that the quick-to-jump-in
  516.             person will not feel my program has locked-up the system when
  517.             they go to do a test.  The first time you select 'Be Selfish'
  518.             from the menu, a requester will pop up reminding you of what
  519.             I just said here.  Once the requester has appeared the
  520.             first time, it will not appear again during the course of the
  521.             program's execution, regardless of how you set the Be Selfish
  522.             menu option (otherwise it could become quite annoying :-) )
  523.             Again, with 'Be Selfish' NOT enabled, there are no restrictions 
  524.             to this program's use, but again you may show a marked 
  525.             performance drop, depending on your system's task load at the test
  526.             time.
  527.  
  528.    ---------------------------------------------------------------------------
  529.    Change Base:
  530.               This menu item allows the selection of the machine to be
  531.               used as the base in the percentage comparisons.  The 
  532.               submenu which appears next to it allows you to choose
  533.               which machine you wish to use as the base machine...the
  534.               default being the A2000.  With any base, the
  535.               percentages, and the graph show the performance of both
  536.               your machine, and the other machines as compared to said
  537.               base.  The base machine will always show itself to have
  538.               a relative performance of 100% (naturally, as it's 
  539.               evaluating itself against itself).  The other machines
  540.               will show percentages relative to the base machine's 
  541.               performance.
  542.  
  543.    ---------------------------------------------------------------------------
  544.    Standard Test Options:
  545.               This menu option contains a submenu for selecting the
  546.               type of code to run for the 'Standard' (non-floating point)
  547.               tests (Dark Blue gadget lettering).  It presently contains
  548.               two options: 
  549.  
  550.                   Standard Code: (NCode)
  551.                                  This version of a particular test is
  552.                                  using normal code which will run on
  553.                                  any type of 680x0 processor, and thus
  554.                                  any Amiga.  This is the default setting.
  555.  
  556.                   020/030 Code:  (0XCode)
  557.                                  Tests run under this option use code
  558.                                  which is optimized to run more efficiently
  559.                                  under 68020,68030, and above processors.
  560.                                  It takes advantage of timing differences,
  561.                                  and specialized instructions present in
  562.                                  these processors.  This option allows 
  563.                                  you to run a test 'set up' to suit a
  564.                                  higher-level processor.
  565.  
  566.               Both versions of the test perform the exact same operations,
  567.               except the machine code used to do it differs.  This allows 
  568.               comparisions to be taken with regard to more 'optimum' code
  569.               conditions for a particular system setup.  (For example, 
  570.               comparing how well your system performs a Matrix manipulation
  571.               while running 020/030 code, compared to 'Standard' code).
  572.               Note: if your system is a 68010 or 68000, you will not be 
  573.               able to use the 020/030 code versions of the tests, as this
  574.               code will not run on those processors.  Thus, when AIBB 
  575.               determines the processor type on your system, it will disable
  576.               the selection if you do not have an 020 or above.
  577.  
  578.    ---------------------------------------------------------------------------
  579.    FP Test Options:
  580.               This menu item and its corresponding submenu are similar
  581.               in concept to the "Standard Test Options" menu item.  The
  582.               difference here is that the selections made here affect the
  583.               Floating Point tests (Light Blue gadget lettering).  Again,
  584.               two options are present:
  585.  
  586.                   Processor Math: (PCode)
  587.                                   If this option is used, AIBB will 
  588.                                   perform any of the floating point tests
  589.                                   initiated using the main system processor.
  590.                                   (eg, all math will be done by the CPU)
  591.  
  592.                   Coprocessor Math: (CPCode)
  593.                                     This option causes AIBB to use 
  594.                                     the version of a test which does the
  595.                                     floating point operations using a
  596.                                     math coprocessor (68881, 68882, or
  597.                                     on board the 68040).
  598.  
  599.               Again, the tests do the same exact operations for either 
  600.               version...simply the method used to carry out the operations
  601.               differs, in this case by the use of in-line coprocessor 
  602.               instructions for the Coprocessor Math selection.  Also, I 
  603.               should note that the Coprocessor Math option is also utilizing
  604.               020/030 based code, as in the "Standard Test Options", as 
  605.               the in-line instructions here require a standard interface to 
  606.               the coprocessor, and thus a 68020 or above is also a requirement.
  607.               While true that software traps could be implemented to use
  608.               a coprocessor on a 68000 or 68010, this has not been used
  609.               much on the Amiga, and thus I felt that I would also use 
  610.               020/030 code to allow a view of how well a system performed
  611.               floating point operations when completely set up to take
  612.               advantage of an 020/030 + coprocessor configuration.  Therefore,
  613.               if you have an accelerator using a 68000 or 68010 which
  614.               utilizes F-line software traps to utilize a math coprocessor,
  615.               the code will most likely crash, as it will also be attempting
  616.               to use 020/030 instructions with your CPU.  Now, to date I have
  617.               not seen any boards which are using the above said method
  618.               [effectively], so this probably will not be a problem.  
  619.               In addition, AIBB tests the system for an FPU when it 
  620.               is invoked, and if none is detected, the Coprocessor Math
  621.               selection will be disabled.    
  622.  
  623. ==============================================================================
  624.  
  625. COMPARISON OPTIONS MENU:  The options present here are very related to
  626. the last two options ("Standard Test Options" and "FP Test Options") present
  627. in the "Test Options" menu.  These options affect the comparision figures
  628. used when the percentage performance evaluation is done agains the 
  629. comparison machines.
  630.  
  631.    Cmp Standard Options:  The options listed in the submenu here are
  632.                           identical to the ones in the "Test Options" 
  633.                           item "Standard Test Options".  However, this
  634.                           does not change the type of code run by your
  635.                           machine.  What it does is change the internal
  636.                           comparision figures to reflect the performance
  637.                           of the comparision machines with the option
  638.                           selected.  For example, if you select 
  639.                           "020/030 Code", then the figures used in the
  640.                           comparisions will be the test times for the
  641.                           comparision machines when running 020/030 code.
  642.  
  643.     Cmp FP Options:  Identical to the above, save that it affects the
  644.                      performance figures used for comparision with respect
  645.                      to the floating point tests.
  646.  
  647. These options may be a little confusing, but here's the idea behind them:
  648. With this setup, you may choose to run a test using "Standard" code.  Yet,
  649. you have "020/030 Code" selected under this menu for the comparisions.  
  650. Therefore, you will be comparing how well your machine runs a test using
  651. "Standard" code, with respect to the comparision machines running 
  652. the same test, but with an advantage: 020/030 code.  Likewise, you may
  653. disadvantage the comparison machines by leaving these options in their
  654. "Standard" mode, and run the tests using 020/030 code for your machine
  655. (Thus possibly showing a great percentage performance increase). 
  656. Likewise for the floating point tests and options.
  657.  
  658. ==============================================================================
  659.  
  660.     Depending on the processor your machine has, you may find another menu, 
  661. 'Processor'.  This field only appears if you are running a 68020 or above 
  662. and allows you to switch the caches of your processor on/off, to see the
  663. effects doing this has on test results.  The menu configures itself to
  664. your processor type, so if you are running a 68020, the only item that will
  665. appear under this menu is 'Switch I-Cache'.  For higher processors, items
  666. to manipulate the Data and Instruction cache, and the BURST modes will
  667. also appear.  When a cache is changed this way, the new cache status will
  668. appear in the CPU status indication area explained below.  If you do
  669. choose to manipulate the caches during the tests, and get lazy and don't
  670. set them back the way they were, the program will automatically set the
  671. caches to the state they were in upon startup when you quit the program.
  672. NOTE: As I indicated, if you are running a 68000 or 68010, this menu will
  673. not be present, as it is of no use to those processors. Also, although the 
  674. choice for switching BURST mode on may appear for your machine's processor, 
  675. it may or may not have effect.  This is because your system must be capable 
  676. of using this mode, and some are not.  If you switch it on and your machine
  677. isn't able to use it, no harm will come of it.  In fact, AIBB will
  678. still set the BURST enable bit(s) in the Cache Control Register, but the
  679. processor will simply ignore them.
  680.  
  681. ==============================================================================
  682. COMPARISON NOTES: (IMPORTANT...PLEASE READ)
  683.  
  684.     The machines used by AIBB for the comparisions had the following
  685. configurations...all figures were acquired with the "Be Selfish" option
  686. ENABLED.  Please read these sections carefully so that you have a clear
  687. picture of the machines/conditions which generated the comparison figures
  688. AIBB uses internally.
  689.  
  690.     A2000:  
  691.     Numerous Amiga 2000s (and 500s, which are basically the same machine at 
  692.     this level) were used to gather the figures for this set of comparison 
  693.     values.  The machines were all equipped with true FAST RAM, and all tests 
  694.     were run out of this memory.
  695.  
  696.     A2500/20:
  697.     This is the earlier Amiga 2500, the model equipped with the CBM A2620
  698.     68020-based accelerator.  The 68020 on-board the accelerator is
  699.     clocked at 14.28MHz, as is the 68881 math coprocessor included.  The
  700.     accelerator is a synchronous design.  A full complement of 32-bit memory
  701.     (standard to the board) was used, and the tests run out of this memory.
  702.     The memory on the board was the standard 100ns memory at 2 wait states.
  703.     The A2620 can be utilized with 80ns memory at 1 wait state by setting
  704.     a appropriate jumper (and using the proper parts), and this should be
  705.     kept in mind if you are testing a system equipped with such.  However,
  706.     I chose to use the 100ns parts @ 2 wait states as they were the 
  707.     standard parts used with the board.  The board does include a 68851
  708.     Memory Management Unit (MMU), so ROM translations on this machine are
  709.     possible, and were done using Dave Haynie's SetCPU (v1.6) utility.
  710.     SetCPU also moves the System Stack out of CHIP RAM, and into 32-bit
  711.     memory when possible, so this must be kept in mind.  The instruction
  712.     cache on the 68020 was left ON (the OS will turn it on for you).
  713.  
  714.     A3000/25:
  715.     The 25MHz model of the Amiga 3000 was used for the tests, which utilizes
  716.     a 25MHz 68030 CPU and 68882 FPU.  The following configuration was 
  717.     evident on the test systems:
  718.     2 megabytes of CHIP RAM, 8 megabytes of FAST.  The FAST RAM on the 
  719.     system was of the 80ns Static Column variety.  This is important to note, 
  720.     as the A3000 can be found in many memory configurations.  The Static 
  721.     Column RAM (SCRAM) allows the use of the 68030's BURST mode of data 
  722.     access.  This does result in a faster system.  Normal DRAM will show 
  723.     slower benchmark performance than the SCRAM memory model.  The tests 
  724.     were, of course, run out of the system's FAST RAM. The 68030 settings
  725.     were with Instruction and Data caches ON, and BURST mode for both
  726.     caches ENABLED. 
  727.  
  728.  
  729. AIBB's internal test figures were acquired under AmigaOS 1.3....there may be 
  730. differences under 2.0 (or other OS versions) which may cause differences with 
  731. the test results for your machine if you are using that version of the OS.  
  732. Particularly in question may be the OS-call heavy tests. [WritePixel 
  733. specifically].  Now, as of this writing, AmigaOS 2.0 was not yet burned into, 
  734. or shipping in ROM form yet.  Systems running this OS version are using 
  735. RAM-resident versions of the KickStart image, which in and of itself will 
  736. affect the benchmark results.  [eg, a 25MHz 030 system under 2.0 may not 
  737. compare the same as the equivalent system under 1.3, particularly for such 
  738. tests as the WritePixel, given that the 1.3 system will probably be running 
  739. OS code within ROM...[or perhaps mapped to 32-bit RAM...in either case there 
  740. may be differences]].  I fully intend to re-evaluate AIBB's comparisons when 
  741. 2.0 is shipping in ROM form, and issue an appropriate update, if need be.  
  742. However, until that time, any comparisions made under 2.0 must be recognized 
  743. as being between a 2.0 equipped machine, and 1.3-equipped machines...which 
  744. may or may not provide significant differences. 
  745.  
  746.     All performance figures for the comparison machines are for NTSC
  747. machines.  PAL machines (or machines with the 1MB Agnus running PAL) will
  748. may show false results due to the timing differences.  If it becomes a
  749. nuisance, I will add PAL support to the comparisons, as it wouldn't be
  750. THAT big of a chore :^).
  751.  
  752.     Again, comparisions made by AIBB are percentage based.  The Graph, and
  753. numerical boxes display the percentage performance of the system being
  754. tested with respect to the "base" system.  The base system will always
  755. show a performance "base" of 100%...so, for example, if you run a test
  756. and get 600%, then you are running 600% of the speed of the base system
  757. on that test...this translates to 6 times the speed.  The display boxes
  758. for the numerical percentages will also display the type of code being
  759. used for the comparisons...this is so you may keep track of just what
  760. you are comparing against.  The abbreviations are:
  761.  
  762.                        (Normal [Integer] tests)
  763.                     NCode  ---- Normal Code model
  764.                     0XCode ---- 020/030 Code models
  765.                         (Floating-Point tests)
  766.                     PCode  ---- Processor-based code model
  767.                     CPCode ---- Coprocessor-based code model
  768.  
  769.      Again, I emphasize that the comparision figures AIBB has housed 
  770. internally were acquired with the "Be Selfish" option ON.  If this option
  771. is not used, you will see significant differences with your performance
  772. with respect to the comparision machines...even if you have an identical
  773. machine.  Also, it is important to keep track of where AIBB is getting
  774. memory for it's tests on your system.
  775.   
  776.      Tests can be affected greatly depending on where the memory ends up 
  777. being allocated, provided external memory is needed for a given test.  The 
  778. Amiga utilizes a prioritized memory allocation scheme.  Memory of higher 
  779. priority is given precedence for general (non-specific) allocation requests, 
  780. and if enough memory within a given node with a given priority exists (and 
  781. it is contiguous), that memory will be allocated over the same size memory 
  782. in a lower priority area.  Now, if the memory in the higher priority area 
  783. is unavailable, the system will search downward through the areas (and 
  784. priorities) until it finds a suitably large, contiguous memory region.  This 
  785. can be quite important to note on accelerated systems which have, in 
  786. addition to 32-bit memory on an accelerator, 16-bit memory.  If AIBB requests 
  787. a memory block for a test, and there are no free areas in your 32-bit RAM 
  788. (or it is severely fragmented to the point that no contiguous chunks of the 
  789. required size exist), AIBB may very well end up with memory from the 16-bit 
  790. pool...and this will affect the benchmark result. [You may desire this, you 
  791. may not...but it is something to keep in mind].  The same argument exists 
  792. for CHIP or SLOW-FAST RAM vs. FAST RAM.  [SLOW FAST RAM exists on Amigas 
  793. with the older 512K Agnus chip.  It is the memory on the A501 expander for 
  794. the A500, and the other 512K out of 1-meg on the stock A2000 with this older 
  795. chip.  This memory is still on the CHIP RAM bus, although it is not treated 
  796. AS CHIP RAM...therefore it is still subject to the bus contention found on 
  797. this bus between the processor and the custom chips (which may result in 
  798. performance degradation).  A program supplied by CBM called "FastMemFirst" 
  799. is necessary and useful for giving any TRUE FAST RAM on the system priority 
  800. over the SLOW-FAST memory which may be present.  People with the 1-meg Agnus 
  801. chip (or the A3000 for that matter) do not have SLOW-FAST memory, and do not 
  802. have to concern themselves with this.].
  803.  
  804.      Certain utilities have surfaced which are designed to improve (to a
  805. small degree) system performance on the Amiga.  Two such programs are
  806. MoveSSP, which moves the system Supervisor stack out of CHIP memory, where
  807. it is normally located, into FAST RAM, in order to alleviate any small 
  808. amount of bus contention which may occur during accesses to this stack.
  809. Another is VBR (or MoveVBR), which moves the system vector base to FAST RAM
  810. from CHIP RAM..(this utility only functions on Amigas with a Vector Base
  811. Register...68010 processors and above).  It should be noted that none
  812. of the comparison figures were obtained with any of these utilities in use.
  813. They could cause a slight speedup for your system, (if you notice it at all),
  814. so keep this in mind when benchmarking a system, and be sure to keep track
  815. of just what your system configuration is at a given time for the tests.
  816. [For the most part, all of the comparison figures were obtained with 
  817. "vanilla" systems, in the sense that little to nothing was added to the
  818. base startup configuration].  Also see the note above on SetCPU v1.6's
  819. movement of the System Stack...for the A2500/20 tests.  This is the same 
  820. basic operation as with MoveSSP, (except the MMU is used) so systems running 
  821. SetCPU v1.6 will have this stack translated, unless explicitly disallowed.
  822. So, the basic rundown is that SetCPU v1.6 WAS used with stack translation for
  823. the A2500/20...but nothing special was done for the A2000 or A3000/25.  I
  824. left the stack translation into the A2500/20 setup simply because it is
  825. the default method in SetCPU v1.6 of translating the system ROM into 
  826. 32-bit memory.
  827.  
  828. ==============================================================================
  829. A WORD ON THE BENCHMARKS:
  830.  
  831.      The benchmarks employed in AIBB, as I have stated, are not in any way
  832. ideal.  They are meant primarily to give a general feel for the performance
  833. of the system in question.  However I do wish to make a few comments about
  834. the benchmark code.  The code for the benchmarks used here is not optimized
  835. heavily.  This is a deliberate action, and with purpose.  Code optimization
  836. by compilers (and assemblers to a different extent) can be a wonderful tool
  837. for enhancing program performance.  However, it can also make _system_
  838. benchmarks quite hard to properly evaluate.  Optimizing compilers (and
  839. post-compilation utilities) do a wide variety of manipulations on the
  840. code generated for a program, or function therein.  These optimizations
  841. are very useful for most situations, but can cause problems with system
  842. benchmarks.  Optimizers may re-adjust code and totally eliminate variables,
  843. portions of expressions, and even entire code segments.  Strength reduction
  844. may be performed on certain operations (an intended multiply operation may
  845. be changed to a simpler multiple-addition operation).  While these things
  846. are VERY useful for other types of code, for benchmarks of systems, they
  847. defeat the purpose.  I want the system to WORK during the benchmarks, and
  848. do EXACTLY what I intended it to do, in the manner I intended.  For this
  849. reason, heavy optimization was not used.  Now, some common optimization was
  850. done...use of register variables where possible, etc... And, a certain
  851. amount of internal compiler optimization was unavoidable.  However, I was
  852. sure to check the output object code, and verify that I was getting a 
  853. good code model of what I wanted tested.  The object of AIBB was not to 
  854. test how well a compiler could optimize code...but to see just how well
  855. different systems could perform while operating on benchmark code.
  856.  
  857.      The benchmarks employed by AIBB are meant to be used in the context
  858. of comparing one type of Amiga, or Amiga setup to another (or to the
  859. built-in comparison machines).  The figures you receive from AIBB should
  860. NOT be used to compare an Amiga to another architecture.  The reason for
  861. this is that, there are too many variables involved in such a comparison.
  862. Take, for example, the Dhrystone benchmark.  AIBB's implementation of the
  863. dhrystone is "standard" (whatever that means these days), BUT...the version
  864. on the other machine architecture may be standard, but was in compiled the
  865. same way?  Better yet, how do the compiler used for AIBB and the other
  866. architecture differ?  (Different C compiler implementations by different
  867. authors/publishers will create different code, depending on their levels
  868. of optimization within the compiler itself, etc...).  Is the other 
  869. architecture's code further optimized?  As you see, this creates a big mess
  870. for using AIBB in such comparisons.  These types of comparisons are better
  871. left to an environment where the compiling, code generation, etc... are 
  872. all under the testing individual's control.
  873.  
  874. ==============================================================================
  875. PROGRAMMING NOTES:
  876.  
  877.      AIBB was written in C, with assembly code sections where necessary.
  878. [the Cache Control Register access routines, etc...].  It was compiled
  879. with SAS/C 5.10a using register argument parameters for all function
  880. calls, 16-bit PC-relative offset function call addressing, and base A4 
  881. relative data addressing.  It was extensively tested on a variety of 
  882. machines, and in a variety of conditions, including AmigaOS 2.0.  It should 
  883. work properly with all versions of AmigaOS, but 2.0 compatibility has not 
  884. been _thoroughly_ tested.  If a problem arises under 2.0, I would appreciate
  885. hearing about it. [In any case, as mentioned earlier, the test figures
  886. were set for AmigaOS 1.3...in some cases the OS version will make no 
  887. difference, in others it may].  The assembly portions of AIBB were
  888. assembled with the SAS "asm" assembler included with SAS/C 5.10a.
  889.  
  890.      I want to make a comment on the use of Disable() within this program.
  891. Disable() is a function designed primarily to allow a task to access data 
  892. structures shared by interrupt code, without worry of having this code 
  893. changed by an interrupt event during the access.  My use of it here was
  894. because it was the only real way to insure that my program would have the
  895. best chance of being given total control of the procesessor.  What I want
  896. to make clear is this:  If you are just starting to program the Amiga,
  897. (or other multitasking systems for that matter), the use of Disable() or
  898. functions like it is to be a last resort, unless you are doing something
  899. very similar to what I have done here.  Disable() is a very cruel thing
  900. to do to a multitasking system, and should be avoided if at all possible.
  901. There are some circumstances where it's use is necessary, to be sure, but
  902. it should be considered that my use of it here is NOT a standard method
  903. of usage for the call.  [In fact, in most circumstances you should not
  904. be Disable()'ed for more than 250ms, as per the ROM Kernel Manual 
  905. recommendations.] In the context where I have used the call for this program, 
  906. it won't cause problems provided the proper (mentioned earlier) environment 
  907. exists.  But to be sure, indiscriminate calls to Disable() and such are very 
  908. poor programming practice.
  909.  
  910. ==============================================================================
  911. ACKNOWLEDGEMENTS:
  912.  
  913.      I wish to thank all of the folks who helped and supported me in this
  914. project.  Especially of help was Dr J. Scott Thayer, sysop of the
  915. Amiga Friends BBS.  He spent long periods of time evaluating AIBB, and
  916. finding bugs which I did not notice.  Without his help it is doubtful
  917. that AIBB v3.0 would have been released in any timely fashion.
  918.  
  919. ==============================================================================
  920. MISCELLANEOUS:
  921.          
  922. Questions, comments, and suggestions about this program are quite welcome.
  923. I can be reached the following ways:
  924.  
  925.         Safe Harbor BBS: Amiga Hardware Special Interest Group Operator
  926.                          (SIGOP--SIG Area 5 [Amiga Hardware])  (414)548-8140
  927.                          I can always be reached here.
  928.         Amiga Friends BBS: (714)870-4754 or -6954 (two lines).  Generally
  929.                            I can be reached here anytime as well.
  930.  
  931.         AmiHolics BBS:   (602)843-8486
  932.         Northwest Amiga Group (NAG): (503)656-7393
  933.         JDR Microsystems BBS: (408)559-0253
  934.         Miller's Amiga System BBS: (612)698-1485
  935.  
  936. I can also be found on USENET: lkoop@crash!pnet01.cts.com (Internet)
  937. [ pick your path :^) ]
  938. If you wish, you can also contact me via the U.S. Snail service at
  939.  
  940.                               LaMonte Koop
  941.                         565 Park Meadows Dr. #302
  942.                           Waite Park, MN  56387
  943.  
  944. Enjoy the program, and don't hesitate to comment on it to me.  I am always
  945. looking to improve the code I write, so I take constructive criticism
  946. well.  However, flames, useless criticism, or general nastiness get their
  947. best attention from me by simply outputting them to either /dev/null or
  948. NIL: ...your choice ;^).   
  949.  
  950.  
  951.  
  952.